/* Copyright 2013 University of Padua, Italy
 *
 */

package it.dei.unipd.healthservice.database;

import it.dei.unipd.healthservice.resource.Categoria;
import it.dei.unipd.healthservice.resource.Prodotto;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * Rappresenta le categorie di prodotti.
 * 
 * @author Simone Zennaro
 * @version 1.00
 */
public class CategoriaDatabase {

	/**
	 * Interrogazione al database.
	 */
	private static final String STATEMENT = "SELECT * FROM Categoria";
	
	/**
	 * Interrogazione al database per estrarre i prodotti di una categoria.
	 */
	private static final String STATEMENT_PPRODOTTI_CATEGORIA = "SELECT * FROM prodotto WHERE categoria_nome=?";

	
	/**
	 * Connessione al database
	 */
	private final Connection con;

	/**
	 * Categoria da salvare
	 */
	private final Categoria categoria;

	

	/**
	 * Inizializza la classe per il salvataggio di una categoria nel DB
	 * 
	 * @param con
	 *            connessione al database.
	 * @param categoria
	 *           categoria da salvare
	 */
	public CategoriaDatabase(Connection con, Categoria categoria) {
		this.con = con;
		this.categoria=categoria;
	}
	
	/**
	 * Inizializza la classe per l'interrogazione del DB
	 * 
	 * @param con
	 *            connessione al database.
	 */
	public CategoriaDatabase(Connection con) {
		this(con,null);
	}

	/**
	 * cerca tutti le categorie presenti nel DB
	 * 
	 * @return lista delle categorie.
	 * 
	 * @throws SQLException
	 *             in caso di problemi nell'accesso al database.
	 */
	public ArrayList<Categoria> getCategorie() throws SQLException {

		PreparedStatement pstmt = null;
		ResultSet rs = null;
		ArrayList<Categoria> categorie=new ArrayList<Categoria>();
		try {
			pstmt = con.prepareStatement(STATEMENT);
			

			rs = pstmt.executeQuery();

			while (rs.next()) {
				categorie.add(new Categoria(rs.getString("nome"),rs.getString("descrizione"))); 
			}
		} finally {
			if (rs != null) {
				rs.close();
			}

			if (pstmt != null) {
				pstmt.close();
			}

			
		}

		return categorie;
	}
	/**
	 * restituisce i prodotti di una categoria
	 * 
	 * @param categoria
	 * 					categoria di prodotti da cercare
	 * 
	 * @return lista dei prodotti.
	 * 
	 * @throws SQLException
	 *             in caso di problemi nell'accesso al database.
	 */
	public ArrayList<Prodotto> getProdottiCategoria(String categoria) throws SQLException {

		PreparedStatement pstmt = null;
		ResultSet rs = null;
		ArrayList<Prodotto> prodotti=new ArrayList<Prodotto>();
		try {
			pstmt = con.prepareStatement(STATEMENT_PPRODOTTI_CATEGORIA);
			pstmt.setString(1, categoria);

			rs = pstmt.executeQuery();

			while (rs.next()) {
				prodotti.add(new Prodotto(rs.getInt("idProdotto"),rs.getString("nome"),rs.getString("immagine"),
						  rs.getBoolean("arichiesta"),Float.parseFloat(rs.getString("prezzo").substring(1)),
						  rs.getString("descrizione"),rs.getString("categoria_nome"))); 
			}
		} finally {
			if (rs != null) {
				rs.close();
			}

			if (pstmt != null) {
				pstmt.close();
			}

			
		}

		return prodotti;
	}
	/**
	 * Chiude la connessione
	 */
	public void closeConnection(){
		try {
			con.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
